package com.jpress.ejb;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.jpress.model.Categoria;
import com.jpress.model.Comentario;
import com.jpress.model.Post;
import com.jpress.remote.CategoriaRemote;

@Stateless(mappedName="bean/categoria")
public class CategoriaEJB implements CategoriaRemote{

	@PersistenceContext(unitName="jpressEE")
	private EntityManager entityManager;
	
	@Override
	public void inserir(Categoria categoria) throws Exception{
		try {
			entityManager.persist(categoria);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public void atualizar(Categoria categoria) throws Exception {
		try {
			entityManager.merge(categoria);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public void excluir(Categoria categoria) throws Exception {
		try {
			categoria = entityManager.merge(categoria);
			entityManager.remove(categoria);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public Categoria findByNome(String nome){
		Query query = entityManager.createNamedQuery("Categoria.findByNome");
		query.setParameter("nome", nome);
		@SuppressWarnings("unchecked")
		List<Categoria> resultado = (List<Categoria>) query.getResultList();
		if(resultado.size() == 1)
			return resultado.get(0);
		return null;
	}
	

	@Override
	public Categoria findByCodigo(int codigo) {
		Query query = entityManager.createNamedQuery("Categoria.findByCodigo");
		query.setParameter("codigo", codigo);
		@SuppressWarnings("unchecked")
		List<Categoria> resultado = (List<Categoria>) query.getResultList();
		for(Categoria c : resultado) {
			for(Post p : c.getPosts()) {
				for(Comentario com : p.getComentarios()) {
					
				}
			}
		}
		if(resultado.size() == 1)
			return resultado.get(0);
		return null;
	}	

	@Override
	public List<Categoria> pesquisar(String nome, String descricao){
		Query query = entityManager.createNamedQuery("Categoria.Search");
		query.setParameter("nome", "%" + nome + "%");
		query.setParameter("descricao", "%" + descricao + "%");
		@SuppressWarnings("unchecked")
		List<Categoria> resultado = (List<Categoria>) query.getResultList();
		return resultado;
	}

	@Override
	public long getQuantidadeCategorias() {
		Query query = entityManager.createNamedQuery("Categoria.countCategorias");
		return (long) query.getSingleResult();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Categoria> getUltimasCategoriasCadastradas(int quantidade) {
		Query query = entityManager.createNamedQuery("Categoria.ultimasCadastradas");
		query.setMaxResults(quantidade);
		return (List<Categoria>) query.getResultList();
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Categoria> findAll() {
		Query query = entityManager.createNamedQuery("Categoria.findAll");
		List<Categoria> resultado = (List<Categoria>) query.getResultList();
		for (Categoria categoria : resultado) {
			for (Post post : categoria.getPosts()) {
				for(Comentario comentario : post.getComentarios()){
					
				}
			}
		}
		return resultado;
	}
}
